import axios, { AxiosRequestConfig } from 'axios'
import { ElMessage } from 'element-plus'
import GLOBAL from '@/config/global'

// 创建一个axios实例
const service = axios.create({
  // baseURL: "", 存在一些场景，调用多个后端地址
  // timeout: 5000, // 超时时间
  withCredentials: true // 允许携带cookie
})

// request拦截器
service.interceptors.request.use(
  (config) => {
    /**
     * 构建通用请求参数时使用
     * buildCommonParamsToRequest(config)
     */
    config.cancelToken = new axios.CancelToken((c) => {
      GLOBAL.httpRequestList.push(c)
    })
    return config
  },
  (error) => {
    return Promise.reject(error)
  }
)
// respone拦截器
service.interceptors.response.use(
  (response) => {
    const res = response.data
    // 请求状态 status 异常处理
    if (!res.status) {
      return res
    }
    // 请求成功
    return res
  },
  (error) => {
    console.log(`request请求出错error：${error}`) // for debug
    if (error.response) {
      ElMessage({
        message: error.message,
        type: 'error',
        showClose: true
      })
    }
    return Promise.reject(error)
  }
)

export default service

// 请求白名单
const WHITELIST = ['/getUser']

// 构建通用请求参数
function buildCommonParamsToRequest(config: AxiosRequestConfig<any>) {
  const { params = {}, url } = config
  if (!url) return
  if (WHITELIST.includes(url)) {
    return
  }
  const { hash } = window.location
  if (hash.startsWith('#/12345')) {
    return
  }
  config.params = Object.assign({}, params)
}
